#ifndef __THREAD_POOL_
#define __THREAD_POOL_

#include <pthread.h>
// 任务链表
typedef struct Task_NODE
{
    void *(*func)(void *); // 回调函数
    void *arg;             // 回调函数参数
    struct Task_NODE *next;
} task_t;
// 线程池所需参数
typedef struct
{
    task_t *first;         // 头节点
    task_t *last;          // 尾节点
    int counter;           // 当前线程数
    int idel;              // 空闲线程数
    int max_count;         // 最大线程数
    int quit;              // 退出标记
    pthread_mutex_t mutex; // 线程锁
    pthread_cond_t cond;   // 条件变量
} threadpool_t;

extern int init_thread_pool(threadpool_t *pool, int max_count);                              // 初始化线程池
extern void threadpool_add_task(threadpool_t *threadpool, void *(*func)(void *), void *arg); // 添加任务
extern void threadpool_destory(threadpool_t *pool);                                          // 销毁线程池
void *thread_run(void *arg);                                                                 // 运行线程
#endif                                                                                       // !__THREAD_POOL_